#  Copyright 2012 Nokia Siemens Networks Oyj
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

import robot.output.proxy

class Testrun(object):
    '''An object used to represent the test run

    The suite, testcase and keyword attributes will be set to the
    currently running suite, testcase or keyword objects. The
    callstack is a list of all ancestors. The last item in the list is
    the currently running object.
    '''
    def __init__(self):
        self.suite = None
        self.testcase = None
        self.keyword = None
        self.callstack = []

    @property
    def current_object(self):
        return self.callstack[-1] if len(self.callstack) > 0 else None

    @property
    def locator(self, obj=None):
        '''Return an indentifier that uniquely identifies where we are in the test'''
        item = obj if obj is not None else self.current_object 
        parent = item.parent
        l = str(item.longname)
        if isinstance(item, robot.output.proxy.KeywordProxy):
            steps = getattr(parent, "steps", [])
            if item in steps:
                index = steps.index(item)
                l = l + ":" + index
        return l.lower().replace(" ", "_")
